import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 定义极坐标函数
def r(theta, a=1):
    """心形线方程"""
    return a * (1 + np.cos(theta))

# 极坐标下的面积计算
def polar_area(r_func, alpha, beta, a=1):
    """
    计算极坐标曲线围成的面积
    r_func: 极径函数
    alpha, beta: 积分区间
    """
    # 定义被积函数
    def integrand(theta):
        return 0.5 * (r_func(theta, a))**2
    
    area, error = integrate.quad(integrand, alpha, beta)
    return area, error

# 计算心形线面积
a = 1
area, error = polar_area(r, 0, 2*np.pi, a)

print(f"心形线围成的面积: {area:.6f}")
print(f"理论面积: {1.5 * np.pi * a**2:.6f}")

# 可视化心形线
theta = np.linspace(0, 2*np.pi, 1000)
radius = r(theta, a)

# 极坐标转直角坐标
x = radius * np.cos(theta)
y = radius * np.sin(theta)

plt.figure(figsize=(8, 8))
plt.plot(x, y, 'r-', linewidth=2)
plt.fill(x, y, alpha=0.3, color='red')
plt.title('心形线 $r = 1 + \\cos\\theta$')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.axis('equal')
plt.show()